<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="generator" content="pandoc">
  <meta name="author" content="滨州学院">
  <title>实用软件工程</title>
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
  <link rel="stylesheet" href="reveal.js/css/reset.css">
  <link rel="stylesheet" href="reveal.js/css/reveal.css">
  <style>
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="reveal.js/css/theme/white.css" id="theme">
  <!-- Printing and PDF exports -->
  <script>
    var link = document.createElement( 'link' );
    link.rel = 'stylesheet';
    link.type = 'text/css';
    link.href = window.location.search.match( /print-pdf/gi ) ? 'reveal.js/css/print/pdf.css' : 'reveal.js/css/print/paper.css';
    document.getElementsByTagName( 'head' )[0].appendChild( link );
  </script>
  <!--[if lt IE 9]>
  <script src="reveal.js/lib/js/html5shiv.js"></script>
  <![endif]-->
</head>
<body>
  <div class="reveal">
    <div class="slides">

<section id="title-slide">
  <h1 class="title">实用软件工程</h1>
  <p class="subtitle">CH02 软件项目立项</p>
  <p class="author">滨州学院</p>
</section>

<section id="学习目标" class="slide level2">
<h2>学习目标</h2>
<ul>
<li>掌握：可行性分析的任务和步骤及可行性分析报告的主要内容；成本估算和效益分析的方法。</li>
<li>熟悉：系统流程图的符号和含义。</li>
<li>了解：软件投标书和软件开发合同及软件项目开发计划的内容。</li>
</ul>
</section>
<section><section id="软件项目立项" class="title-slide slide level1"><h1>2.1. 软件项目立项</h1></section><section id="软件项目分类" class="slide level2">
<h2>软件项目分类</h2>
<ul>
<li>软件项目成熟度
<ul>
<li>概念开发</li>
<li>新产品开发</li>
<li>产品增强</li>
<li>产品线</li>
</ul></li>
<li>软件项目通用性
<ul>
<li>订单软件项目</li>
<li>非订单软件项目</li>
</ul></li>
</ul>
</section><section id="项目立项" class="slide level2">
<h2>项目立项</h2>
<ul>
<li>项目发起</li>
<li>项目论证</li>
<li>项目审核</li>
<li>项目立项</li>
</ul>
</section><section id="项目可行性分析" class="slide level2">
<h2>项目可行性分析</h2>
<ul>
<li>可行性分析的目的</li>
<li>可行性分析的内容</li>
<li>可行性分析的步骤</li>
</ul>
</section><section id="可行性分析的目的" class="slide level2">
<h2>可行性分析的目的</h2>
<ul>
<li>用最小的代价在尽可能短的时间内</li>
<li>确定该软件项目
<ul>
<li>是否能够开发</li>
<li>是否值得开发</li>
</ul></li>
</ul>
</section><section id="可行性分析的内容" class="slide level2">
<h2>可行性分析的内容</h2>
<ul>
<li>确定一个项目在规定时间内是否有可行解以及是否值得去解决
<ul>
<li><ol type="1">
<li>技术可行性：开发的风险；资源的有效性；技术。</li>
</ol></li>
<li><ol start="2" type="1">
<li>经济可行性：成本（设备费用，机房及附属设施，系统开发费用，系统的安装、运行和维护费用，人员培训费用）；效益（直接经济效益，间接社会效益）。</li>
</ol></li>
<li><ol start="3" type="1">
<li>社会可行性</li>
</ol></li>
</ul></li>
</ul>
</section><section id="可行性分析的步骤" class="slide level2">
<h2>可行性分析的步骤</h2>
<ul>
<li><ol type="1">
<li>确定项目规模和目标</li>
</ol></li>
<li><ol start="2" type="1">
<li>研究现有的系统</li>
</ol></li>
<li><ol start="3" type="1">
<li>导出新系统的高层逻辑模型</li>
</ol></li>
<li><ol start="4" type="1">
<li>提出可行的解决方案并对其进行评估和比较</li>
</ol></li>
<li><ol start="5" type="1">
<li>选择合适的解决方案进行投资及效益分析</li>
</ol></li>
<li><ol start="6" type="1">
<li>社会因素方面可行性分析</li>
</ol></li>
<li><ol start="7" type="1">
<li>制定开发计划</li>
</ol></li>
<li><ol start="8" type="1">
<li>撰写可行性报告得出结论</li>
</ol></li>
</ul>
</section><section class="slide level2">

<ul>
<li>可行性研究报告的三种结论
<ul>
<li>可以按计划进行软件项目的开发</li>
<li>需要解决某些存在的问题或对现有的解决方案进行一些调整或改善后才能进行软件项目的开发</li>
<li>待开发的软件项目不具有可行性，则立即停止该软件项目</li>
</ul></li>
</ul>
</section><section id="可行性研究报告的主要内容" class="slide level2">
<h2>可行性研究报告的主要内容</h2>
<ul>
<li>引言</li>
<li>系统建设的背景、必要性和意义</li>
<li>拟建系统的候选方案</li>
<li>可行性认证</li>
<li>比较几个方案</li>
</ul>
</section><section id="召开项目启动会议" class="slide level2">
<h2>召开项目启动会议</h2>
<ul>
<li>项目动员</li>
<li>明确项目组织、工作职责和工作流程</li>
<li>制定项目进度计划</li>
<li>确定在项目实施过程中对特殊问题的处理办法</li>
<li>制定沟通与检查计划</li>
</ul>
</section></section>
<section><section id="系统流程图" class="title-slide slide level1"><h1>2.2. 系统流程图</h1></section><section id="系统流程图的作用" class="slide level2">
<h2>系统流程图的作用</h2>
<dl>
<dt>系统流程图</dt>
<dd>系统流程图是描绘物理系统的传统工具
</dd>
<dd>它的基本思想是用图形符号以黑盒子形式描绘系统中的每个部件
</dd>
<dd>系统流程图表达的是部件的信息流程，而不是对信息进行加工处理的控制过程
</dd>
</dl>
</section><section id="系统流程图的符号" class="slide level2">
<h2>系统流程图的符号</h2>
<ul>
<li>处理，输入输出，连接，换页连接，数据流，文档，联机存储，磁盘，显示，人工输入，人工操作，辅助操作，通信链路</li>
</ul>
</section></section>
<section><section id="成本-效益分析" class="title-slide slide level1"><h1>2.3. 成本-效益分析</h1></section><section id="成本估算方法" class="slide level2">
<h2>成本估算方法</h2>
<ul>
<li>代码行估算技术</li>
<li>任务分解估算技术</li>
<li>Putnam 估算模型</li>
<li>COCOMO 模型</li>
</ul>
</section><section class="slide level2">

<h3 id="代码行估算">代码行估算</h3>
<ul>
<li>确定功能</li>
<li>算出各子功能代码行数的平均值</li>
<li>确定各个子功能的代码行成本和生产率</li>
<li>计算该项目的总代码行数、总成本和总工作量</li>
</ul>
</section><section class="slide level2">

<h3 id="任务分解估算技术">任务分解估算技术</h3>
<ul>
<li>首先将软件开发工程分解为若干个相对独立的任务</li>
<li>再分别估计每个单独开发任务的成本</li>
<li>最后累加起来得出软件开发工程的总成本</li>
</ul>
</section><section class="slide level2">

<h3 id="putnam-估算模型">Putnam 估算模型</h3>
<p><br /><span class="math display"><em>L</em> = <em>C</em><sub><em>k</em></sub><em>E</em><sup>1/3</sup><em>T</em><sub><em>d</em></sub><sup>4/3</sup></span><br /></p>
<ul>
<li><span class="math inline"><em>L</em></span> 是代码行数</li>
<li><span class="math inline"><em>E</em></span> 是开发需要的人力（以人年为单位）</li>
<li><span class="math inline"><em>T</em><sub><em>d</em></sub></span> 是开发需要的时间（以年为单位）</li>
<li><span class="math inline"><em>C</em><sub><em>k</em></sub></span> 是技术水平常数
<ul>
<li>对于差的开发环境 <span class="math inline"><em>C</em><sub><em>k</em></sub> = 2500</span></li>
<li>对于好的开发环境 <span class="math inline"><em>C</em><sub><em>k</em></sub> = 10000</span></li>
<li>对于优越的开发环境 <span class="math inline"><em>C</em><sub><em>k</em></sub> = 12500</span></li>
</ul></li>
</ul>
</section><section class="slide level2">

<h3 id="cocomo-模型">COCOMO 模型</h3>
<p><br /><span class="math display"><em>M</em><em>M</em> = <em>C</em><sub>1</sub> × <em>K</em><em>L</em><em>O</em><em>G</em><sup><em>α</em></sup> × ∏<em>f</em><sub><em>i</em></sub></span><br /></p>
<ul>
<li><span class="math inline"><em>M</em><em>M</em></span> 是开发工作量（以人月为单位）</li>
<li><span class="math inline"><em>C</em><sub>1</sub></span> 是模型系数</li>
<li><span class="math inline"><em>K</em><em>L</em><em>O</em><em>C</em></span> 是估计的代码行数（以千行为单位）</li>
<li><span class="math inline"><em>α</em></span> 是模型指数</li>
<li><span class="math inline"><em>f</em><sub><em>i</em></sub></span> 是成本因素</li>
</ul>
</section><section id="效益分析" class="slide level2">
<h2>效益分析</h2>
<ul>
<li>货币的时间价值
<ul>
<li>现在存入 <span class="math inline"><em>P</em></span> 元，<span class="math inline"><em>n</em></span> 年后得到 <span class="math inline"><em>F</em> = <em>P</em> × (1 + <em>i</em>)<sup><em>n</em></sup></span> 元</li>
<li><span class="math inline"><em>n</em></span> 年后能收入 <span class="math inline"><em>F</em></span> 元，那么这些钱现在的价值是 <span class="math inline"><em>P</em> = <em>F</em>/(1 + <em>i</em>)<sup><em>n</em></sup></span></li>
</ul></li>
<li>投资回收期：工程累积经济效益等于最初投资所需要的时间。</li>
<li>纯收入：在整个生存周期内新系统的累计经济效益与投资之差。</li>
</ul>
</section><section id="投资回收率" class="slide level2">
<h2>投资回收率</h2>
<ul>
<li>只有当投资回收率大于银行年利率时，开发系统才是合算的</li>
</ul>
<h3 id="section"></h3>
<p><br /><span class="math display"><em>P</em> = <em>F</em><sub>1</sub>/(1 + <em>j</em>) + <em>F</em><sub>2</sub>/(1 + <em>j</em>)<sup>2</sup> + ⋯ + <em>F</em><sub><em>n</em></sub>/(1 + <em>j</em>)<sup><em>n</em></sup></span><br /></p>
<ul>
<li><span class="math inline"><em>P</em></span> 是现在的投资额</li>
<li><span class="math inline"><em>F</em><sub><em>i</em></sub></span> 是第 <span class="math inline"><em>i</em></span> 年年底的效益</li>
<li><span class="math inline"><em>n</em></span> 是系统的使用寿命</li>
<li><span class="math inline"><em>j</em></span> 是投资回收率</li>
</ul>
</section></section>
<section><section id="利用project制定项目计划" class="title-slide slide level1"><h1>2.4. 利用Project制定项目计划</h1></section><section id="项目管理工具-project" class="slide level2">
<h2>项目管理工具 Project</h2>
<ul>
<li>自学 11.2 节</li>
<li>完成 p224 实验1</li>
</ul>
</section></section>
    </div>
  </div>

  <script src="reveal.js/js/reveal.js"></script>

  <script>

      // Full list of configuration options available at:
      // https://github.com/hakimel/reveal.js#configuration
      Reveal.initialize({
        // Push each slide change to the browser history
        history: true,

        // Optional reveal.js plugins
        dependencies: [
          { src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
          { src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
          { src: 'reveal.js/plugin/notes/notes.js', async: true }
        ]
      });
    </script>
    </body>
</html>
